home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 102 / examples / textswis.c < prev    next >
C/C++ Source or Header  |  1987-01-25  |  5KB  |  110 lines

  1. /* Programmer's guide to GEM - 1986 - p.158 -listing 3.2 - CJPurcell Dec'86  */
  2. /* CTRLRC.C  -  MAIN DRIVER for draw_rc()  examples  using Mark Williams C   */
  3. /* to be tested in NDC and/or RC mode with or without GDOS for implications  */
  4. #include <portab.h>                       /* try <> and see ?? */
  5. #include <osbind.h>                       /* system constants  */
  6. #include <gemdefs.h>                      /* GEM-definition    */
  7. /* #include <obdefs.h>                    / * object definition*/
  8.  
  9. WORD contrl[12], intin[128], ptsin[128], intout[128], ptsout[128];
  10.  
  11. #define M_OFF 256
  12. #define RC_COORDS 2
  13. #define RIGHT_ALIGNED 2
  14. #define BOTTOM_ALIGNED 3
  15.  
  16. VOID main()                /* not GEMAIN as in ref. */
  17. {
  18.         WORD handle, work_in[11], work_out[57], max_w, max_h;
  19.         WORD ii;
  20.  
  21.         appl_init();                                    /* init AES for call */
  22.         handle = graf_handle( &ii,&ii,&ii,&ii );        /* get screen handle */
  23.         graf_mouse( M_OFF, NULL );                      /* hide mouse        */
  24.         v_clrwk( handle );                              /* clear workstation */
  25.  
  26.         for( ii=0; ii<11; ++ii ) work_in[ii]=1;         /* init work_in array*/
  27.         work_in[10] = RC_COORDS;                     /* using RC coordinates */
  28.         v_opnvwk( work_in, &handle, work_out );      /* open the workstation */
  29.  
  30.         max_w = work_out[0]; max_h = work_out[1];
  31.         draw_rc( handle,0,0,max_w,max_h );           /* do the examp.routine */
  32.  
  33.         vst_alignment( handle,RIGHT_ALIGNED,BOTTOM_ALIGNED,&ii,&ii );
  34.         v_gtext( handle,max_w,max_h,"Press any Key to Continue" );
  35.         evnt_keybd();                                   /* pause for viewing */
  36.         v_clsvwk( handle );                             /* close workstation */
  37.         appl_exit();                                    /* tell AES finished */
  38. }
  39.  
  40. /* Programmer's Guide to GEM - 1986 - p.199,Listing 3.13 - CJPurcell- Dec'86 */
  41. /* TEXTSWIS.C - display text alignment for SWISS font lower case letters GDOS*/
  42. /*  #include <portab.h>   */
  43. #define SYSTEM_FONT 0
  44. #define SWISS_FONT  2
  45. #define LEFT_ALIGN  0
  46. #define BASELINE    0
  47. #define SMALL_LETTERS  10
  48. #define BIG_LETTERS    72
  49. #define COLOR_LETTERS  36
  50.  
  51. BYTE *y_labels[6] = { " 0:baseline "," 1:half ",  " 2:ascent ",
  52.                       " 3:bottom " , " 4:descent ", " 5:top " };
  53.  
  54. /* FUNCTION print_line */
  55. WORD print_line( handle, text, cur_x, cur_y, point_size, font_type )
  56.                  WORD  handle, cur_x, cur_y, point_size, font_type ;
  57. BYTE *text;
  58. {
  59.         WORD pxy[4], junk, ver_in;
  60.         WORD y_lines[6];                           /* table of row positions */
  61.         WORD distances[5], effects[3];             /*  for  vqt_font_info()  */
  62.         WORD extents[8];                           /*   for vqt_extent()     */
  63.  
  64.         vst_font( handle, font_type );            /* use requested font-type */
  65.         vst_alignment( handle, LEFT_ALIGN, BASELINE, &junk, &junk );
  66.         vst_point( handle, point_size,  &junk, &junk, &junk, &junk );
  67.         v_gtext( handle, cur_x, cur_y, text );    /* display the text        */
  68.         vqt_font_info( handle,&junk, &junk, distances, &junk, effects );
  69.  
  70.         y_lines[0] = cur_y;                       /* baseline                */
  71.         y_lines[1] = cur_y - distances[2];        /* halfline                */
  72.         y_lines[2] = cur_y - distances[3];        /* ascent line             */
  73.         y_lines[3] = cur_y + distances[0];        /* bottom line             */
  74.         y_lines[4] = cur_y + distances[1];        /* descent line            */
  75.         y_lines[5] = cur_y - distances[4];        /* top line                */
  76.  
  77.         vqt_extent( handle, text, extents );
  78.         pxy[0] = cur_x;
  79.         pxy[2] = cur_x + extents[2];           /* right edge of text string */
  80.         vst_font( handle, SYSTEM_FONT );
  81.         vst_point( handle, SMALL_LETTERS, &junk, &junk, &junk, &junk );
  82.         for(ver_in + 5 ; ver_in >= 0; --ver_in)
  83.         {
  84.                 pxy[1] = pxy[3] = y_lines[ver_in];
  85.                 v_pline( handle, 2, pxy);
  86.                 v_gtext( handle, pxy[2], pxy[3], y_labels[ver_in] );
  87.         }
  88.         return distances[0]+distances[4];      /*distance bottom to top line*/
  89. }
  90.  
  91.  
  92. /* FUNCTION draw_rc */
  93. VOID draw_rc( handle, dx, dy, swidth, sheight )
  94.          WORD handle, dx, dy, swidth, sheight;
  95. {
  96.         WORD cur_x, cur_y, resize ;
  97.         resize = COLOR_LETTERS ;                /* presume color system, but*/
  98.         if ( 2 == Getrez() ) resize = BIG_LETTERS ;
  99.  
  100.         vst_load_fonts( handle, 0 );            /* load all available fonts */
  101.         cur_x  = dx + (swidth / 32 );
  102.         cur_y  = dy + (sheight / 4 ) ;
  103.         cur_y += print_line( handle, "abcdefghijkl", cur_x, cur_y,
  104.                               resize , SWISS_FONT );
  105.         cur_y += print_line( handle, "MNOPQRST", cur_x, cur_y,
  106.                               resize , SWISS_FONT );
  107.         print_line( handle, "uvwxyz", cur_x, cur_y, resize, SWISS_FONT );
  108.         vst_unload_fonts( handle, 0 );
  109. }                                          /*      CJPurcell 08Dec'86  */
  110.